package com.example.jedis.client.protocol.response;

import com.example.jedis.client.exception.RedisProtocolMovedException;
import com.example.jedis.client.protocol.constant.RedisProtocolConstant;
import com.example.jedis.client.transport.RedisTransport;

import java.nio.ByteBuffer;

/**
 * 一个错误 回复（或者单行回复，single line reply）是一段以 "-" 开始、 "\r\n" 结尾的单行字符串。
 *
 * -MOVED 9458 127.0.0.1:6379\r\n
 * 如果所查找的槽不是由该节点处理的话， 节点将查看自身内部所保存的哈希槽到节点 ID 的映射记录， 并向客户端回复一个 MOVED 错误。上面的错误信息包含键 x 所属的哈希槽9458， 以及负责处理这个槽的节点的 IP 和端口号 127.0.0.1:6379
 *
 */
public class ApplyError extends  AbstractApplyProtocol implements ApplyProtocol{
    @Override
    public byte getFlag() {
        return RedisProtocolConstant.APPLY_ERROR;
    }

    @Override
    public Object fromBytes(RedisTransport redisTransport, ByteBuffer byteBuffer) {
        String errorMessage =  this.readFirstSegmentToString(redisTransport,byteBuffer);
        if(errorMessage.startsWith(RedisProtocolConstant.APPLY_ERROR_MOVE)){
            throw new RedisProtocolMovedException(errorMessage);
        }else{
            return errorMessage;
        }
    }
}
